/**
 * Copyright &copy; 2013-2015 山东易科德软件有限公司 All rights reserved.
 */
package cn.net.ecode.modules.sys.dao;

import java.util.List;

import cn.net.ecode.common.persistence.CrudDao;
import cn.net.ecode.common.persistence.annotation.MyBatisDao;
import cn.net.ecode.modules.sys.entity.Role;
import cn.net.ecode.modules.sys.entity.User;
import cn.net.ecode.modules.sys.entity.UserDataScope;

/**
 * 用户DAO接口
 * @author ThinkGem
 * @version 2015-4-24
 */
@MyBatisDao
public interface UserDao extends CrudDao<User> {
	
	/**
	 * 根据登录Code获取用户
	 * @param user new User().setLoginCode();
	 * @return 取不到返回null
	 */
	public User getByLoginCode(User user);
	
	/**
	 * 根据用户类型和引用Code获取用户
	 * @param user new User().setUserType(); new User().setRefCode();
	 * @return
	 */
	public User getByUserTypeAndRefCode(User user);
	
	/**
	 * 查询全部用户数目
	 * @return
	 */
	public long findAllCount(User user);
	
	/**
	 * 更新用户密码
	 * @param user
	 * @return
	 */
	public int updatePassword(User user);
	
	/**
	 * 更新登录信息，如：登录IP、登录时间
	 * @param user
	 * @return
	 */
	public int updateLoginInfo(User user);

	/**
	 * 查询集团用户列表
	 * @param user
	 * @return
	 */
	public List<User> findCorpUserList(User user);
	
	/**
	 * 根据用户查询角色数据
	 * @param userDataScope
	 * @return
	 */
	public List<Role> findUserRoleList(User user);
	
	/**
	 * 插入用户角色关联数据
	 * @param user
	 * @return
	 */
	public int insertUserRole(User user);

	/**
	 * 删除用户角色关联数据
	 * @param user
	 * @return
	 */
	public int deleteUserRole(User user);

	/**
	 * 根据用户查询控制权限数据
	 * @param user
	 * @return
	 */
	public List<UserDataScope> findUserDataScopeList(User user);

	/**
	 * 插入用户的数据权限
	 * @param user
	 * @return
	 */
	public int insertUserDataScope(User user);
	
	/**
	 * 删除用户的数据权限
	 * @param user
	 * @return
	 */
	public int deleteUserDataScope(User user);
	
	/**
	 * 更新用户信息
	 * @param user
	 * @return
	 */
	public int updateUserInfo(User user);
	
	/**
	 * 更新密保问题
	 * @param user
	 * @return
	 */
	public int updateQuestion(User user);
	
	/**
	 * 更改引用的姓名(根据用户类型和引用代码)
	 * @param user
	 * @return
	 */
	public int updateRefNameByRefCode(User user);
	
	/**
	 * 更新用户状态
	 * @param user
	 * @return
	 */
	public int updateUserStatus(User user);

	/**
	 * 更改用户状态(根据用户类型和引用代码)
	 * @param user
	 * @return
	 */
	public int updateUserStatusByRefCode(User user);

	/** 
	 * 按角色给用户授权
	 * @author jiangwenchao
	 * @param user
	 * @return List<User>  
	 */
	public List<User> findUserByRoleCode(User user);
	
	/**
	 * 删除用户角色关联数据
	 * @param role
	 * @return
	 */
	public int deleteUserRoleByRole(Role role);

	/** 
	 * 按角色插入和用户关系
	 * @author jiangwenchao
	 * @param role
	 * @return int  
	 */
	public int insertUserRoleByRole(Role role);

	public void updateUser(User user);

	public List<String> findRoleList(String userCode);

    List<User> findSubAdminList(User user);
}
